/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.femass.repository.infra;

import com.femass.model.Participante;
import com.femass.repository.ParticipanteRepository;
import com.femass.util.FacesUtil;
import java.util.List;
import javax.faces.application.FacesMessage;
import org.hibernate.HibernateException;
import org.hibernate.Session;

/**
 *
 * @author daureo
 */
public class ParticipanteRepositoryHibernate implements ParticipanteRepository{

    @Override
    public List<Participante> todos() {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return session.createCriteria(Participante.class)
                .list();        
    }

    @Override
    public Participante porInscricao(Participante participante) {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return (Participante) session.getNamedQuery("Participante.findByNumInscricao")
                .setParameter("numInscricao", participante.getNumInscricao()).uniqueResult();
    }

    @Override
    public Participante salvar(Participante participante) {
         Session session = (Session) FacesUtil.getRequestAttribute("session");        
       try{           
             Participante retorno = (Participante) session.merge(participante);                       
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Participante Salvo! - Inscrição " + retorno.getNumInscricao());
            return retorno;
       } catch(Exception e){
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_WARN, "Erro ao salvar Participante!" + e.getMessage());
       }
       return null;
    }

    @Override
    public void remover(Participante participante) {
       Session session = (Session) FacesUtil.getRequestAttribute("session");
      
        try {        
            session.delete(participante);
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Participante excluído com sucesso!");
        } catch (HibernateException e) {
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Participante não excluído!");
        } 
    }

    @Override
    public Participante porInscricao(Integer numInscricao) {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return (Participante) session.getNamedQuery("Participante.findByNumInscricao")
                .setParameter("numInscricao", numInscricao).uniqueResult();
    }

    @Override
    public Participante porCPF(String cpf) {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return (Participante) session.getNamedQuery("Participante.findByCpf")
                .setParameter("cpf", cpf).uniqueResult();
    }
    
}
